В системе Oracle администратор баз данных располагает специальными средствами, которые позволяют ему блокировать некоторые команды SQL и SQL*Plus. Фактически этот инструмент администратора представляет собой таблицу PRODUCT_USER_PROFILE, к которой имеет доступ только пользователь SYSTEM. Описание столбцов таблицы:
Пользователь SYSTEM может создать таблицу PRODUCT_USER_PROFILE, запустив сценарий $ORACLE_HOME/SQLPLUS/ADMIN/PUBLBLD.SQL
Для того чтобы заблокировать использование команды SQL или SQL*Plus каким-либо пользователем, нужно ввести соответствующую запись в таблицу PRODUCT_USER_PROFILE. Например, чтобы заблокировать для пользователя SCOTT оператор SELECT из интерпретатора SQL*Plus, зарегистрируйтесь в системе как SYSTEM и выполните код приведенный ниже.
INSERT INTO product_user_profile
(product, userid, attribute, scope, numeric_value, char_value, date_value, long_value)
VALUES
('SQL*Plus', 'SCOTT', 'SELECT', NULL, NULL, 'DISABLED', NULL, NULL);
Внесенные таким образом изменения не действуют на текущий сеанс и вступят в силу только при очередном входе этого пользователя в систему.
Чтобы разблокировать ранее заблокированную команду SQL, нужно удалить соответсвующую запись из таблицы PRODUCT_USER_PROFILE. Вот код по отмене ограничения оператора SELECT для юзера SCOTT
DELETE FROM product_user_profile WHERE userid='SCOTT' and attribute='SELECT';
Блокировка команды SET SQL*Plus повлечет за собой блокировку команд SET ROLE и SET TRANSACTION, а блокировка START - блокировку команд @ и @@.
Так же вы можете заблокировать некоторые роли для определенных пользователей. Для этого следует вставить в таблицу строку с таким содержимым полей: